<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<script type="text/javascript">
			/*
			 * 原型 prototype
			 * 
			 * 	我们所创建的每一个函数，解析器都会向函数中添加一个属性prototype，这个属性对应着一个对象，我们称为原型对象
			 * 	对象实例可以通过隐含的__proto__属性来访问类的原型对象	
			 * 
			 * 	原型对象就相当于一个公共的区域，所有同一个类的实例都可以访问到这个原型对象
			 * 
			 *  当我们访问对象的一个属性或方法时，它会先在对象自身中寻找，如果有则直接使用，
			 *  如果没有则会去原型对象中寻找，找到则直接使用
			 * 
			 *  在创建构造函数时，可以将对象共有的属性和方法，统一添加到构造函数的原型对象中
			 */
			
			function MyClass() {
				
			}
			
			// 向MyClass的原型中添加属性a
			MyClass.prototype.a = 123;
			
			// 向MyClass的原型中添加一个方法
			MyClass.prototype.sayHello = function(){
				alert("hello");
			};
			
			var mc = new MyClass();
			
			var mc2 = new MyClass();
			
			console.log(MyClass.prototype);
			console.log(mc2.__proto__ == MyClass.prototype);
			
			// 向mc中添加a属性
			mc.a = "我是mc中的a";
			
			console.log(mc.a); // 从对象自身获取
			console.log(mc2.a); // 从原型对象中获取
			
			mc.sayHello(); // 调用原型对象中的方法
		</script>
	</head>
	<body>
	</body>
</html>
